
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Kawe Ramon
 */
public class MapaCidades {


    public int [][] cidades;
    public boolean [] visitados;


    public MapaCidades(int quantCidades){

        this.cidades = new int [quantCidades][quantCidades];
        this.visitados = new boolean[quantCidades];
        inicializaVisitados();
    }

    public String getSolucaoGulosa(){

        String toReturn = "";

        String distancias = "Distancias Percorridas: ";
        List<Cidade> candidatos = new ArrayList<Cidade>();
        this.inicializaVisitados();

        int [][] cidadestmp = this.cidades;
        int kmTotal = 0;
        int ponteiroProx = 0;
        
        
        for (int i = 0; i < cidadestmp.length; i++) {


            for (int j = 0; j < cidadestmp[ponteiroProx].length; j++) {
                
                if(cidadestmp[ponteiroProx][j] == 0){
                    visitados[j] = true;
                }
            }
      
            for (int k = 0; k < cidadestmp[i].length; k++) {
                if(cidadestmp[ponteiroProx][k] != 0 && cidadestmp[ponteiroProx][k] != -1 && !visitados[k]){
                    Cidade cidade = new Cidade(k, cidadestmp[ponteiroProx][k]);
                    candidatos.add(cidade);
                    
                }
            }

            Collections.sort(candidatos, new ComparaDistancias());
            if(!candidatos.isEmpty()){
               
                distancias+= candidatos.get(0).getDistancia() + "-> ";
                visitados[candidatos.get(0).getIndex()] = true;
                ponteiroProx = candidatos.get(0).getIndex();
                kmTotal += candidatos.get(0).getDistancia();
                
                candidatos.removeAll(candidatos);
            }
//            else {
//                kmTotal += cidadestmp[ponteiroProx][0];
//            }
            
           
            toReturn = "Solução Gulosa: " + kmTotal + " m.";

        }

        toReturn += "\n" + distancias;
        return toReturn;
    }



    public void inicializaVisitados(){
        for (int i = 0; i < this.visitados.length; i++) {
            this.visitados[i] = false;
        }
    }

    public void lerArquivo(String filename){
        LerArquivo lerArquivo = new LerArquivo();

        this.cidades = lerArquivo.readMapa(filename);
    }

    public String toString(){
        String toReturn = "";
        for (int i = 0; i < cidades.length; i++) {
            for (int j = 0; j < cidades.length; j++) {
                toReturn += String.valueOf(this.cidades[i][j] + " ,");
            }
            toReturn += "\n";
        }
        return toReturn;
    }

}
